停车场管理系统(数据库)

停车场管理系统主要实现的功能包括:

1、查看空位  2、停车 3、系统计费 3、管理员查看停车记录 4、查找车辆信息

/*****************************************************
copyright (C), 2016-2017, Lighting Studio. Co.,     Ltd. 
File name:停车场
Author:王    Version:1.0    Date:2017.3.20 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stddef.h>

#define ALL 10

void creat_table(sqlite3 * db)            //创建表,记录车位信息
{
	char *sql;
	char *errmsg;
	int ret;

	sql = "create table if not exists mytable (id integer primary key,name text,entertm integer,exittm integer,stall text,entertime text,exittime text);";

	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret != SQLITE_OK)
	{
		printf("create table fail!:%s\n",errmsg);
		exit(-1);
	}
}

void creat_new(sqlite3 * db)             //创建新表,保存该停车场的所有停车记录
{
	char *sql;
	char *errmsg;
	int ret;

	sql = "create table if not exists newtable (id integer,name text,stall text,entertime text,exittime text);";

	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret != SQLITE_OK)
	{
		printf("create table fail!:%s\n",errmsg);
		exit(-1);
	}
}

void insert_init(sqlite3 * db)                  //对创建的车位进行初始化
{
	int i;
	int j = 0;
	for(i = 0;i < ALL; i++)
	{
		int ret;
		char *sql;
		char *errmsg;

		sql="insert into mytable(id,name,entertm,exittm,stall,entertime,exittime) values(NULL,'no',NULL,NULL,'no','no','no');";
		ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
		if(ret != SQLITE_OK)
		{
			printf("insert fail!%s\n",errmsg);
			exit(-1);
		}
	}
}

void insert_value(sqlite3* db)                    //车主选择位置自由停车
{
	int ret,a;
	char sql[100];
	char *errmsg;
	char name[10];
	time_t t;

	printf("输入车牌号:\n");
	scanf("%s",name);
	printf("选择车位:\n");
	scanf("%d",&a);

	t = time(NULL);
	struct tm *tb;
	tb = localtime(&t);

	sprintf(sql,"update mytable set name = '%s',entertm = %d,stall = 'parking',entertime = '%d.%d.%d %d:%d:%d' where id = %d;",name,t,tb->tm_year+1900,tb->tm_mon+1,tb->tm_mday,tb->tm_hour,tb->tm_min,tb->tm_sec,a);

	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret != SQLITE_OK)
	{
		printf("insert fail!%s\n",errmsg);
		exit(-1);
	}
}

void select_all(sqlite3 *db)                  //查看该停车场的车位状况
{
	int ret;
	int i;
	int row = 0;
	int column = 0;
	char * sql;
	char ** presult;
	char *errmsg;

	sql = "select id,name,stall from mytable;";

	ret = sqlite3_get_table(db,sql,&presult,&row,&column,&errmsg);
	if(ret != SQLITE_OK)
	{
		printf("select fail:%s\n",errmsg);
		exit(-1);
	}

	for(i = 0;i < (ALL + 1) * column;i++)
	{
		printf("%15s",presult[i]);
		if((i + 1)%column == 0)
		{
			printf("\n");
		}
		if((i + 1) == column)
		{
			printf("---------------------------------------------------------\n");
		}
	}
}

void update_exittm(sqlite3 *db)               //离开车位,计算费用,更新车位信息
{
	int ret1,ret2,ret3;
	int a,b;
	int row = 0;
	int column = 0;
	char ** presult;
	char sql1[100];
	char sql2[100];
	char sql3[100];
	char * errmsg1;
	char * errmsg2;
	char * errmsg3;
	char name[10];
	time_t t;
	struct tm *td;

	printf("输入车牌号:\n");
	scanf("%s",name);

	t = time(NULL);
	td = localtime(&t);

	sprintf(sql1,"update mytable set exittm = %d,exittime = '%d.%d.%d %d:%d:%d' where name = '%s';",t,td->tm_year+1900,td->tm_mon+1,td->tm_mday,td->tm_hour,td->tm_min,td->tm_sec,name);
	ret1 = sqlite3_exec(db,sql1,NULL,NULL,&errmsg1);           //离开车位
	if(ret1 != SQLITE_OK)
	{
		printf("update fail:%s\n",errmsg1);
		exit(-1);
	}

	sprintf(sql3,"select entertm,exittm from mytable where name like '%s';",name);

	ret3 = sqlite3_get_table(db,sql3,&presult,&row,&column,&errmsg3);
	if(ret3 != SQLITE_OK)
	{
		printf("select fail :%s\n",errmsg3);
		exit(-1);
	}

	sprintf(sql3,"insert into newtable(id,name,entertime,exittime) select id,name,entertime,exittime from mytable where name like '%s';",name);
	sqlite3_exec(db,sql3,NULL,NULL,&errmsg1);         //将该车的停车信息保存到新表中

	a = atoi(presult[2]);
	b = atoi(presult[3]);

	printf("总费用:%d元\n",(b-a)/3600*2);           //计算费用

	sprintf(sql2,"update mytable set stall = 'no',name = 'no',entertime = 'no' where name = '%s';",name);
	ret2 = sqlite3_exec(db,sql2,NULL,NULL,&errmsg2);
	if(ret2 != SQLITE_OK)
	{
		printf("delete fail:%s\n",errmsg2);
		exit(-1);
	}

}

void select_name(sqlite3 * db)                   //按照车牌信息查找该车的停车记录
{
	int ret,i;
	int row = 0;
	int column = 0;
	char ** presult;
	char sql[100];
	char *errmsg;
	char name[20];

	while(1)
	{
		printf("输入车牌号:(q quit)\n");
		scanf("%s",name);
		if(strcmp(name,"q") == 0)
			return;
		sprintf(sql,"select id,name,entertime,exittime from newtable where name like '%s';",name);

		ret = sqlite3_get_table(db,sql,&presult,&row,&column,&errmsg);
		if(ret != SQLITE_OK)
		{
			printf("select fail :%s\n",errmsg);
			exit(-1);
		}

		for(i = 0;i < (row + 1) * column;i++)
		{
			printf("%20s",presult[i]);
			if((i + 1)%column == 0)
			{
				printf("\n");
			}
			if((i + 1) == column)
			{
				printf("-------------------------------------------------------------------------------\n");
			}
		}
	}
}

void select_newall(sqlite3 *db)                     //查看该停车场的所有停车记录
{
	int ret;
	int i;
	int row = 0;
	int column = 0;
	char * sql;
	char ** presult;
	char *errmsg;

	sql = "select id,name,entertime,exittime from newtable;";

	ret = sqlite3_get_table(db,sql,&presult,&row,&column,&errmsg);
	if(ret != SQLITE_OK)
	{
		printf("select fail:%s\n",errmsg);
		exit(-1);
	}

	for(i = 0;i < (row + 1) * column;i++)
	{
		printf("%20s",presult[i]);
		if((i + 1)%column == 0)
		{
			printf("\n");
		}
		if((i + 1) == column)
		{
			printf("-----------------------------------------------------------------------------------\n");
		}
	}
}

void menu()
{
	printf("\n**************************\n");
	printf("** 1)查看空位 ** 2)停车 **\n");
	printf("** 3)离开交费 ** 4)退出 **\n");
	printf("**     5)管理员系统     **\n");
	printf("**   收费标准2¥/h   **\n");
	printf("**     30分钟免费     **\n");
	printf("**************************\n\n");
}

int main()
{
	int ret,i;
	int a = 0;
	int b,c;
	sqlite3 *db;

	ret = sqlite3_open("park.db",&db);
	if(ret != SQLITE_OK)
	{
		printf("open fail!\n");
		exit(-1);
	}
	creat_table(db);
	creat_new(db);

	insert_init(db);
	while(a != 4)
	{
		menu();
		printf("选择操作:");
		scanf("%d",&a);
		switch(a)
		{
			case 1:select_all(db);break;
			case 2:insert_value(db);break;
			case 3:update_exittm(db);break;
			case 5:{
					   printf("输入管理员密码(123456):\n");
					   scanf("%d",&c);
					   if(c == 123456)
					   {
					   b = 0;
					   while(b != 3)
					   {
						   printf("1)查看所有停车记录 2)查找车辆停车信息 3)退出\n");
						   scanf("%d",&b);
						   switch(b)
						   {
							   case 1:select_newall(db);break;
							   case 2:select_name(db);break;
						   }
					   }
					   }
					   else
						   printf("没有权限!\n");
				   }break;
		}
	}
	sqlite3_close(db);

    return 0;
}


  • 21
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
停车场管理系统 数据库设计 数据库管理系统在日常生活中的应用十分广泛,比如停车场管理系统,涉及 到车位划分,车辆进出收费等信息管理,一个好的停车场数据管理系统设计,会 使得停车场管理结构优化,提高服务效率。我们现设计并制定一个停车场管理系 统,并从需求分析、概念结构、逻辑结构、物理结构实现四个方面开展。 一、需求分析 对于停车位,分为固定停车位和自由停车位两种,其中固定停车位已经分配 给特定的车主,车主进出不再收费(采取包年制或包若干月) ,而且对固定车位 以及固定车位租用人信息进行收集并记录。对于自由车位,专为临时性停车顾客 使用,只收集车位占用信息、临时停车的车辆信息以及计时收费信息。另外,对 于大型停车场,分配的管理员不止一位时,给不同管理员分配额管理范围信息也 要收集并记录,同时记录管理员的身份信息。 (一)顶层设计流程图 1 P 管理收费 进出车辆 定车位 收费单 关于计时收费的功能,目前停车场都是自动地磁式感应记录车辆的进出时间,这里我 们只做停车费用的查询,即费用已生成于表,我们只做费用查询功能。 (二)第二层设计流程图 (三)系统功能结构 车辆 固定车辆 自由车辆 放行 被管理员看管 进入停车场 询问管理员 有车位,放行 离开停车场 被管理员看管 付费 离开停车场 无车位,等待或离去 停车场管理系统 空车位查询 停 车 费 用 结 算 固 定 车 位 查 询 空 闲 车 位 查 询 停 车 收 费 标 准 修 改 收 费 情 况 明 细 查 询 车 辆 进 出 记 录 查 询 管 理 系 统 维 护 升 级 管 理 员 的 信 息 修 改 计时收费管理 系统维护及管理 车 位 占 用 时 间 统 计 功能实现: 1.车主可以登陆账户查询未租用的空闲固定车位、空闲的临时自由车位以及驶离 停车场的结算费用。 2.管理员通过身份验证后可以查询停车场的收费明细,还可以对车辆进出记录进 行查询、管理以及对停车场的收费标准进行修改。 (四)逻辑模型: 1.停车车辆(车牌编号,车位编号,车主姓名,车辆颜色) 【注:包括固定车和自由车,车主名为空代表自由车】 2.车位(车位编号,是否占位,是否固定,车主姓名,收费标准) 【注:包括自由车位和固定车位,由是否固定区分,车主名可空,代表自由车 位】 3.车主(车牌编号,车位编号,姓名,地址,年龄,联系方式) 【注:车牌号,车位号不能为空,有姓名,地址等信息,固定车位车主】 4.进出记录(编号,车牌编号,进入日期,离开日期,进入时间,离开时间,费 用) 5.管理员(工作号,姓名,管辖范围) 注:第一个属性为主键 二、概念结构分析 (一)分 ER 图 图 1 停车车辆信息 E-R 图 图 2 车位信息 E-R 图 停车车辆 车主姓名 车牌编号 车位编号 车辆颜色 车位 车位编号 是否固定 是否占位 车主姓名 收费标准 图 3 进出记录信息 E-R 图 图 4 固定车主信息 E-R 图 进出记录 进入时间 车牌编号 停车费用 离开时间 车主 地址 姓名 车位编号 车牌编号 联系方式 年龄 编号 图 5 管理员信息 E-R 图 管理员 工作号 管辖范围 姓名 (二)总 ER 图 管理范围 进出记录 管理员 管理 地址 车辆颜色 进入时间 离开时间 费用 车牌编号 车位编号 车位编号 是否占位 是否固定 车主姓名 收费标准 车主 工作编号 停车车辆 使用 放置 记载 记录 姓名 年龄 车位编号 车牌编号 联系方式 车牌编号 车主姓名 姓名 车位 编号 三.逻辑结构分析 (一)关系模式 1. 停车车辆表 字段名 数据类型 长度 说明 描述 Cpbh varchar 20 主键,NOT NULL 车牌编号 Cwbh numeric 20 唯一约束,NOT NULL,外键 车位编号 Czxm varchar 12 NULL 车主姓名 Clys varchar 12 NOT NULL 车辆颜色 用于记录固定车主以及自由车主的停车信息,所以车主姓名可以为空。 2. 车位信息表 字段名 数据类型 长度 说明 描述 Cpbh varchar 20 主键,NOT NULL 车牌编号 Sfzw varchar 2 NOT NULL 是否占位 Sfbz varchar 50 NOT NULL 收费标准 Sfgd varchar 2 NOT NULL 是否固定 Czxm varchar 12 NULL 车主姓名 3. 车主信息表 字段名 数据类型 长度 说明 描述 Cpbh varchar 20 主键,NOT NULL 车牌编号 Cwbh numeric 20 NOT NULL 车位编号 Xm varchar 12 NULL 姓名 Dz varchar 50 NULL 地址 Nl numeric 20 NULL
停车场管理系统 浙江农林大学地理信息科学171班 HMc、FZ、HHb、XHc、ZLl、CC小组 模块 模块名 命名空间 介绍 完成度 模型模块 Park.Model 提供数据库模型 99% 服务模块 Park.Service 提供业务处理方法 99% 管理模块 Park.Admin 提供管理页面供管理员对各种信息进行管理、查看和汇总 80% 用户模块 Park.Mobile 提供手机网站,供用户进行查看账户信息和停车场信息 80% 接口模块 Park.API 为停车场硬件设施和Park.Mobile提供API 80% 车位设计模块 Park.Designer 用于设计停车位地图。由于技术不够,故使用WPF作为设计器框架。 99% 测试模块 Park.Test 用于测试,非单元测试 - 日志 20200329 设计器 基本完成车位设计器的主要功能: 画板网格显示 鼠标绘制停车位、通道 停车区的选择 停车区的新增、删除、重命名 使用鼠标浏览画板 使用鼠标选取对象 配置文件的导入导出 配置文件的自动保存和恢复 20200330 设计器 将通道从矩形改为线 通道支持了非横纵方向 通道支持了朝左上方拉伸 通道支持按Shift进行约束 停车位新增支持旋转 鼠标悬浮样式改为图形显示阴影 支持了删除功能 20200331 管理端 搭建了对车主管理表格的基本页面 核心 增加了停车场业务处理相关方法 测试 增加了测试类 20200401 核心 增加了交易充值业务处理相关方法 测试 增加了非会员进出、会员进出的测试方法 20200402 核心 为数据库添加了显式外键声明 管理端 基本完成车主管理表格 基本完成车位管理表格 20200403 核心 支持了从Json文件(设计器导出)导入停车位的功能 基本完成停车区地图的显示(To Bitmap) 20200404 管理端 显示了车主拥有的车辆数量、交易订单数量,点击车辆数量可以跳转到车辆表 提升了”表格模型“基类和js方法,方便之后的编写 基本完成了停车记录表格 20200406 管理端 完成交易记录表格 重新分离编写停车区和停车位管理页面 核心 增加了”墙体“模型 设计器 支持了”墙体“模型 设备接口 做好准备 20200407 管理端 基本完成模拟界面和逻辑 设备接口 基本完成门卫接口、车位传感器接口 20200410 管理端 新增了一个图表 修改数据库初始化代码,符合本系统 基本完成权限角色的分配 新增数据库管理页面 模型 新增了车主的注册时间、最后登录时间字段,新增车辆的准入字段 服务 分离了数据库创建与生成测试数据 进入停车场返回复合类型 20200501 手机 修改为前后端分离项目,前端使用Vue进行编写,后端使用Park.API 20200502 手机 基本完成主页 完成账户验证 完成车辆管理界面和查看停车记录 20200503 模型 新增Config类型,删除了定价策略的停车区字段 服务 将某些服务的参数CarOwner改为CarOwnerID 手机 完成了车辆的删除和新增功能 新增“充值”页,支持了充值和充月卡 20200504 服务 修复了数据库生成的一些时序问题和没有应用定价策略的问题 手机 基本完成交易记录界面 完成停车场地图的显示 完成账户的注销 20200505 服务 修复了数据库生成的一些时序问题,停车记录时间为1-01-01 8:05的问题 手机 修复了一些小BUG,例如格式化代码不正确、宽度过窄等问题 新增点击标题栏文字返回主页 20200515 管理端 完成了导入停车场设计器生成的JSON的功能 20200605 服务 将用户初始化时的用户名改为非随机、顺序的。 修复了设置密码时,有些加了盐有些没加的BUG 管理端 修改初始化密码为1234而非123456 手机 修复了充值金额可以为负数、非数字、很大的数字的BUG 新增修改密码界面 20200610 服务 优化测试数据创建流程,修改了数量、停车记录生成的时间 管理端 完成了首页的数据大屏 20200611 服务 优化测试数据创建流程,支持设置添加用户数量,支持了停车时修改停车位状态,修改模拟当前时间 管理端 数据大屏新增停车场名称标题、新增每个停车区的车位状态饼状图 新增停车场设置界面 数据库管理界面增加了生成测试数据的用户数量输入框 20200616 管理端 删除了车主界面的新建按钮(没写功能)和停车记录、交易记录页面的删除按钮(防止外键出错) 修改了登录页和菜单的图标 设置强制设置指定的主题,删除主题按钮 删除了一些搜索框 20200616 管理端 在车主管理界面新增了管理按钮,可以一键打开用户手机端界面,并修改用户的一些数据 出自 © 2021 GitHub, Inc.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值